// 导入 wechat-http 模块
import http from 'wechat-http'

// 接口基础路径
http.baseURL = 'https://live-api.itheima.net'

// 设置请求拦截器
http.intercept.request = function (options) {
  // 扩展头信息
  const defaultHeaders = {}
  // 设置 token 信息
  defaultHeaders.Authorization = 'Bearer ' + getApp().token
  // 合并默认头信息
  options.header = Object.assign({}, defaultHeaders, options.header)
  // 返回处理后的 options
  return options
}

// 设置响应拦截器
http.intercept.response = async function ({ data, config }) {
  // 如果状态码为 401 则表明 token 失效，需要重新登录
  if (data.code === 401) {
    // 获取应用实例
    const app = getApp()
    console.log(config)
    // console.log(app.refreshToken)
    if (config.url.includes('/refreshToken')) {
      // 获取当前页面地址，保证登陆成功后跳转回来
      const pageStack = getCurrentPages()
      const currentPage = pageStack.pop()
      const redirectURL = currentPage.route

      // 判断redirectURL 是不是 tabBar 页面
      const isTabBarPage = wx.utils.isTabBarPage(redirectURL)
      // 如果是 则使用 wv.switchTab 跳转
      const routeType = isTabBarPage ? 'switchTab' : 'redirectTo'

      // 跳转到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectUrl=/${redirectURL}&routeType=${routeType}`,
      })
    }
    // 调用接口对 token 进行更新
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refreshToken,
      },
    })
    // 更新 token 信息
    if (res.code !== 10000) return wx.utils.messagePrompt('登录失效，请重新登录')

    app.setToken('token', res.data.token)
    app.setToken('refreshToken', res.data.refreshToken)

    // 获取原来接口的请求参数
    config = Object.assign(config, {
      header: {
        Authorization: 'Bearer ' + res.data.token,
      },
    })
    return http(config)
  }
  return data
}

// 以模块的方式导出 http 实例
export default http
// 或者 挂载全局对象 wx 上
wx.http = http
